// api/module/OpenAiChat.js
import api from '@/api/service'

export function service_ai_remote(form) {
    let url = '/ai/openAiMemory/frank';
    return api.service.get(url);
}

export function service_ai_openAi_chat(form) {
    console.info(form)
    let url = '/ai/openAiMemory/chat?message=' + form.message;
    return api.service.get(url);
}


/**
 * 使用 EventSource 进行流式 AI 会话
 * @param {Object}   form          请求体，如 { message: "你好" }
 * @param {Function} onMessage     收到文本块时触发 (text) => void
 * @param {Function} onError       出错时回调 (error) => void
 * @param {Function} onComplete    流正常结束时回调 () => void
 * @returns {EventSource}          可手动调用 .close() 中断
 */
export function service_ai_openAi_stream(form, onMessage, onError, onComplete) {
    const url = api.baseUrl + `/ai/openAiMemory/stream?message=${encodeURIComponent(form.message)}`;
    const es = new EventSource(url);
    console.info("建立 SSE 连接:", url);

    /** 1. 普通文本消息 */
    es.addEventListener("message", (e) => {
        const data = e.data;
        console.info(data)
        // 约定: 后端在最后发送一条 [DONE] 表示结束
        if (data === "[DONE]") {
            onComplete && onComplete();
            es.close();
            return;
        }

        onMessage && onMessage(data);
    });

    /** 2. 后端如果自定义 event("done") 也能兼容 */
    es.addEventListener("done", () => {
        onComplete && onComplete();
        es.close();
    });

    /** 3. 连接建立成功 */
    es.addEventListener("open", () => {
        console.log("SSE 连接已建立");
    });

    /** 4. 错误处理 */
    es.addEventListener("error", (err) => {
        // readyState === 2 说明服务端正常关闭，不算真正错误
        if (es.readyState === EventSource.CLOSED) {
            onComplete && onComplete();
        } else {
            console.error("SSE 错误:", err);
            onError && onError(err);
        }
        es.close();
    });

    return es;
}